//#define OS_CPU_GLOBALS

//#include <ucos_ii.h>
//#include "cpu_wait.h"


//模拟压栈
//OS_STK       *OSTaskStkInit           (void           (*task)(void *p_arg),
//                                       void            *p_arg,
//                                       OS_STK          *ptos,
//                                       INT16U           opt)
//{
//    //R13--SP存储在TCB第一个字段OSTCBStkPointer
//    OS_STK *stk;
//    opt = opt;
//    stk = ptos;
//    *(stk) = (INT32U)0; //PSR
//    *(--stk) = (INT32U)task; //程序入口，后面变为PC--returnAddress
//    *(--stk) = (INT32U)0; //LR--最开始未调用函数一定是空的,所以在模拟压栈过程中给0
//    *(--stk) = (INT32U)0; //R12 --IP寄存器
//    *(--stk) = (INT32U)0; //R3
//    *(--stk) = (INT32U)0; //R2
//    *(--stk) = (INT32U)0; //R1
//    *(--stk) = (INT32U)0; //R0
//    //FPU使能的时候才定义为压栈
////    *(--stk) = (INT32U)0; //R14 --存储从异常模式返回时的EXC_RETURN值，以决定返回后所处的模式以及使用的SP指针
//    *(--stk) = (INT32U)0; //R11
//    *(--stk) = (INT32U)0; //R10
//    *(--stk) = (INT32U)0; //R9
//    *(--stk) = (INT32U)0; //R8
//    *(--stk) = (INT32U)0; //R7
//    *(--stk) = (INT32U)0; //R6
//    *(--stk) = (INT32U)0; //R5
//    *(--stk) = (INT32U)0; //R4
//    return stk;
//}
                                      

//以上补充函数体的定义的声明一些是存在与ucos_ii.h中，一些存在于cpu_wait.h中，并且广泛运用于core中各类os_xxxx.c文件内
//这些函数的定义原本基本上在删除的ports文件夹下的与cpu架构挂钩的文件内，也就是我们后期要进行移植时需要补充的函数体

//如果以1ms为基准的话，那么counts就用10500就可以了，我们在下面并未像其ports源码中默认使用AHB作为Systick的时钟来源，而是使用AHB/8，但是用AHB也无所谓，只不过Reload的值有所变化
//void OS_CPU_SysTickInit(INT32U counts){
//    INT32U prio;
//    INT32U basepri;
//    
//    basepri = (INT32U)(CPU_CFG_KA_IPL_BOUNDARY << (8u - CPU_CFG_NVIC_PRIO_BITS));//basepri要注意设置成256而不是255，255用这种方法无法成功，但是也可以通过其他方法设置成255，这个视情况而定，但是显然设置成256会减少代码量
//    OS_CPU_CM_SYST_RVR = counts - 1u;
//    
//    prio = OS_CPU_CM_SCB_SHPRI3;
//    prio &= 0x00FFFFFFu; //保留低24位的设置
//    prio |= (basepri << 24u); //256<<24u为0x00000000，明显就是在操作系统的设置中默认Systick的中断为0，实现最精确地延时，几乎没有中断可以抢占它
//                              //除开复位-3,NMI-2,硬件错误-1，Systck优先级最高
//    OS_CPU_CM_SCB_SHPRI3 = prio;
//    
//    OS_CPU_CM_SYST_CSR |= OS_CPU_CM_SYST_CSR_ENABLE;//这里操作系统将其设置为了84MHz，直接使用的是AHB作为Systick时钟来源
//    
//    OS_CPU_CM_SYST_CSR |= OS_CPU_CM_SYST_CSR_TICKINT;
//}

//void OS_CPU_SysTickHandler(void){
//    
//    #if OS_CRITICAL_METHOD == 3u
//        OS_CPU_SR cpu_sr;
//    #endif
//    
//    OS_ENTER_CRITICAL();
//    OSIntEnter();
//    OS_EXIT_CRITICAL();
//    
//    OSTimeTick();
//    
//    OSIntExit();
//    return;
//}
